package com.jh.pattern.singleton.lazy;

import java.io.Serializable;

/**
 * @author JH_Wong
 * @projectName newforward
 * @title LazyInnerClassSingleton.java
 * @package com.jh.pattern.singleton.lazy
 * @description 静态内部类懒汉单例
 * @date 2019-05-23 09:23
 */
public class LazyInnerClassSingleton implements Serializable {

    // 如果不使用LazyHolder是不会初始化的，兼容饿汉式单例浪费空间的问题
    // 兼顾synchronized性能问题，因为只有使用的时候才会初始化
    private LazyInnerClassSingleton(){}

    // static 是为了单例空间的共享
    // final 保证方法不会被重写和重载
    // return 之前才会初始化LazyHolder类
    public static final LazyInnerClassSingleton getInstance() {
        return LazyHolder.LAZY;
    }

    // private 默认不加载
    private static class LazyHolder {
        private static final LazyInnerClassSingleton LAZY = new LazyInnerClassSingleton();
    }

    private Object readResolve(){
        return LazyHolder.LAZY;
    }
}
